Jazz Forum Welcome to the Jazz Community Forum Connect and collaborate with IBM Engineering experts and users

Programmatically finding the process template used in a project

How do I programmaticlly find out the process template used in a project through Reportable Rest API.  If no methods are available in Reportable Rest API please suggest using RTC SDK. 

0 votes

Comments

By "process template", do you mean the XML process configuration source for a specified project area?

Yes.  I am talking about the "Process/Project Template" that is used while creating the project.   For example while creating a life cycle project we select "Scrum" as the "Project template".  I am looking for an API REST or SDK using which I can retrieve the "Project template" name.  In this case "Scrum"

 It's simple if you just want to get the name of the process template. Suppose you have got an instance of IProjectArea, you can use IProjectArea.getProcessDefinition() to get the handle of the process template, then you can use IRepositoryItemService.fetchItem() to get the instance of this process template. 

It's simple if you just want to get the name of the process template. Suppose you have got an instance of IProjectArea, you can use IProjectArea.getProcessDefinition() to get the handle of the process template, then you can use IRepositoryItemService.fetchItem() to get the instance of this process template. 

If we use RTC SDK, the below suggestion from @sam detweiler works.  What if I want to use Rest API.  Can I find the "Process/Project Template" using reportable rest API

far as I know this data is not available thru the REST api
(I had to use an internal class to get access to the parent if any)

showing 5 of 6 show 1 more comments


5 answers

Permanent link
here is some code I used to find the process source, even if it was from a parent project
static String keyname = com.ibm.team.process.common.ProcessContentKeys.PROCESS_SPECIFICATION_KEY;
<code>
need to get access to the internal method to get the parent

import com.ibm.team.process.internal.common.impl.ProjectAreaImpl;

            if ((repo=login(url, userid, password, sPm)) != null )
            {
                // get the content Manager
                IContentManager icm = repo.contentManager();
               
                // get the list of projects
                // * means all
                // specific name means only that one.. case sensitive I think
                List<IProjectArea> projectList = getProjectArea(repo, sPm,
                        ProjectType);

                System.out.println(" there are " + projectList.size()
                        + " projects");

                // loop thru the list of projects, if any
                for (int i = 0; i < projectList.size(); i++)
                {
                    // get the project area
                    IProjectArea ip = projectList.get(i);
                    // if the project is not archived
                    if(!ip.isArchived())
                    {
                        System.out.println("\nproject name = " + ip.getName());               
                         
                        IItem ipi = ip.getWorkingCopy();
                        // call the internal only method to get the parent process
                        // provider.. if any
                        IProjectAreaHandle iparenthandle = ((ProjectAreaImpl) ipi)
                                .getProcessProvider();
                        // if there was a parent
                        if (iparenthandle != null)
                        {
                            // get it
                            IProjectArea parentProject = (IProjectArea) (repo
                                    .itemManager().fetchCompleteItem(iparenthandle,
                                    IItemManager.DEFAULT, sPm));
                            System.out.println("have parent project name = "
                                    + parentProject.getName());
                            // get the process data
                            @SuppressWarnings("unchecked")
                            Map<String, Object> pd = ip.getProcessData();
                            ////  here is the xml extract
                            // get the process config content object
                            IContent processSource = (IContent) pd.get(keyname);
                            if (processSource != null)
                            {
                                System.out.println("have xml source");
                                saveXMLSource(ip, processSource, icm, sPm);
                            }
</code>

saving the xml source
<code>
    private static void saveXMLSource(IProjectArea ip, IContent ic,
            IContentManager icm, SysoutProgressMonitor sPm)
    {
        // make an output stream for the content manager
        OutputStream os = new ByteArrayOutputStream();
        // get the content of the content object.
        try
        {
            icm.retrieveContent(ic, os, sPm);

            // write xml content to file
            // project name + data name
            FileOutputStream fo = new FileOutputStream(ip.getName() + "."
                    + keyname);
            // write
            fo.write(os.toString().getBytes(), 0, os.toString().length());
            // close
            fo.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
</code>

find the (or list of projects)
<code>
    public static List<IProjectArea> getProjectArea(ITeamRepository repo,
            IProgressMonitor monitor, String projectAreaName)
            throws TeamRepositoryException
    {
        List<IProjectArea> projectareaonly = new ArrayList<IProjectArea>();

        @SuppressWarnings("unchecked")
        // get all the projects in this repository
        List<IProjectArea> projectAreas = getProcessItemService(repo)
                .findAllProjectAreas(null, monitor);

        // if Not ALL projects
        if (!projectAreaName.equalsIgnoreCase("*"))
        {
            for (int i = 0; i < projectAreas.size(); i++)
            {
                // get next project from array
                IProjectArea projectArea = projectAreas.get(i);

                // if the names are equal, case sensitive
                if (projectArea.getName().equals(projectAreaName))
                {
                    // return this one project to the caller
                    System.out.println("Found " + projectAreaName);
                    projectareaonly.add(projectArea);
                    break;
                }
                else if (i + 1 == projectAreas.size())
                {
                    System.out.println("Failed to find requested project '"
                            + projectAreaName + "'");
                }
            }
            return projectareaonly;
        }
        else
            projectareaonly = projectAreas;
        return projectareaonly;
    }
</code>

2 votes


Permanent link
I really want to find a way using REST API, how I can find "Process template" in particular project area?
Please let me know if somebody knows how to get handle to process templates using REST API's
Somebody in comment section said its not available.But still want to confirm

Thanks in advance!

0 votes


Permanent link
 far as I know, this is not available via rest apis

0 votes


Permanent link
 We don't support it through REST API. 

For what we support in REST API, you could refer to: https://jazz.net/wiki/bin/view/Main/DraftTeamProcessRestApi

0 votes


Permanent link
Al-right thanks for the answer Sam and Qiong!
I have another question since obvious option is RTC SDK now
If we use RTC SDK is there a way to create workitems in RTC using process templates programatically? similar to the way we do it in RTC UI manually?

I appreciate your help in this regard!

Thanks,
Harshal

0 votes

Your answer

Register or log in to post your answer.

Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.

Search context
Follow this question

By Email: 

Once you sign in you will be able to subscribe for any updates here.

By RSS:

Answers
Answers and Comments
Question details
× 10,938

Question asked: May 02 '13, 1:28 a.m.

Question was seen: 6,757 times

Last updated: Mar 24 '14, 1:29 a.m.

Confirmation Cancel Confirm